﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using grupo2DEWStudio7i.Persistencia.ADO;
using grupo2DEWStudio7i.Dominio;
using grupo2DEWStudio7i.Persistencia;

namespace grupo2DEWStudio7i.Pruebas
{
    [TestFixture]
    public class TestReservaDAO
    {
        private IReservaDAO reservaDAO = null;
        private IDetalleReservaDAO detalleReservaDAO = null;
        private int codigoGenerado = 0;

        [TestFixtureSetUp]
        public void PrepararPruebas()
        {
            reservaDAO = new Persistencia.ADO.ReservaDAO();
            foreach (Reserva reserva in reservaDAO.ListarTodos())
                reservaDAO.Eliminar(reserva);
            // 3. Creamos 2 reservas para tenerlos disponibles en las pruebas
            reservaDAO.Crear(new Reserva() { Cliente = new Cliente() { Codigo = 1 }, Sala = new Sala() { Codigo = 1 }, Dia = "25/09/11", Hora = "15:00", Numero = 2, CostoTotal = 250});
            reservaDAO.Crear(new Reserva() { Cliente = new Cliente() { Codigo = 2 }, Sala = new Sala() { Codigo = 2 }, Dia = "26/09/11", Hora = "18:00", Numero = 3, CostoTotal = 320 });
        }
        [Test]
        public void Test1_Crear()
        {
            // 1. Clase a probar: SalaDAO
            Assert.IsNotNull(reservaDAO);
            // 2. Declaramos e instanciamos la entidad de dominio
            Reserva reservaACrear = new Reserva();
            reservaACrear.Cliente = new Cliente() { Codigo = 1 };
            reservaACrear.Sala = new Sala() { Codigo = 1 };
            reservaACrear.Dia = "26/09/2011"; ;
            reservaACrear.Hora = "17:00";
            reservaACrear.Numero = 2;

            reservaACrear.CostoTotal = 250;
            // 3. Declaramos la entidad que contendrá el resultado
            Reserva reservaCreada = null;
            // 4. Probamos que no ocurra error al ejecutar el método
            Assert.DoesNotThrow(delegate
            {
                // 5. Ejecutamos el método a probar
                reservaCreada = reservaDAO.Crear(reservaACrear);
                codigoGenerado = reservaCreada.Codigo;
            });
            // Probamos que la entidad resultante no sea nula
            Assert.IsNotNull(reservaCreada);
            // Probamos que el código generado sea mayor a 0
            Assert.Greater(reservaCreada.Codigo, 0);
            
        }

        [Test]
        public void Test1_Crear_Con_Detalle()
        {
            // 1. Clase a probar: SalaDAO
            Assert.IsNotNull(reservaDAO);
            // 2. Declaramos e instanciamos la entidad de dominio
            Reserva reservaACrear = new Reserva();
            reservaACrear.Cliente = new Cliente() { Codigo = 2 };
            reservaACrear.Sala = new Sala() { Codigo = 3 };
            reservaACrear.Dia = "25/09/2011"; ;
            reservaACrear.Hora = "19:00";
            reservaACrear.Numero = 2;
            reservaACrear.CostoTotal = 250;
            // 3. Declaramos la entidad que contendrá el resultado
            Reserva reservaCreada = null;
            // 4. Probamos que no ocurra error al ejecutar el método
            Assert.DoesNotThrow(delegate
            {
                // 5. Ejecutamos el método a probar
                reservaCreada = reservaDAO.Crear(reservaACrear);
                codigoGenerado = reservaCreada.Codigo;
            });

            decimal total = reservaACrear.CostoTotal;

            detalleReservaDAO = new Persistencia.ADO.DetalleReservaDAO();
            DetalleReserva detalleAcrear = new DetalleReserva();
            detalleAcrear.CodigoReserva = codigoGenerado;
            detalleAcrear.Servicio = new Servicio() { Codigo = 2 };
            //detalleAcrear.Instrumento = "";
            detalleAcrear.Costo = 25;

            DetalleReserva detalleCreado = null;
            Assert.DoesNotThrow(delegate
            {
                // 5. Ejecutamos el método a probar
                detalleCreado = detalleReservaDAO.Crear(detalleAcrear);
                total = detalleAcrear.Costo;
            });

            total = total + detalleCreado.Costo;

            detalleReservaDAO = new Persistencia.ADO.DetalleReservaDAO();
            DetalleReserva detalleAcrear2 = new DetalleReserva();
            detalleAcrear2.CodigoReserva = codigoGenerado;
            //detalleAcrear2.Servicio = "";
            detalleAcrear2.Instrumento = new Instrumento() { CodInstrumento = 3 };
            detalleAcrear2.Costo = 35;

            Assert.DoesNotThrow(delegate
            {
                // 5. Ejecutamos el método a probar
                detalleCreado = detalleReservaDAO.Crear(detalleAcrear);
            });

            total = total + detalleAcrear2.Costo;


            // Probamos que la entidad resultante no sea nula
            Assert.IsNotNull(reservaCreada);
            // Probamos que el código generado sea mayor a 0
            Assert.Greater(reservaCreada.Codigo, 0);

        }

    }
   


}